package ejbentidad;

import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import modelo.Customer;
import modelo.PersonaA;

public class EJBEntidad {

    public static void main(String[] args) {
        PersonaA per = new PersonaA();
        per.setEnActivo(Boolean.FALSE);
        per.setFechaNacimiento(new Date());
        per.setNombre("Alberto");
        System.out.println(per);

        EntityManagerFactory emf = Persistence.createEntityManagerFactory("EJBEntidadPU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(per);

            PersonaA alberto = em.find(PersonaA.class, 65536);
            if (alberto != null) {
                System.out.println(alberto.getNombre());
                alberto.setEnActivo(Boolean.TRUE);
            }
            em.flush();

            Query consulta = em.createQuery(
                    "SELECT p FROM Persona p WHERE p.nombre LIKE :elNombre");
            consulta.setParameter("elNombre", "Alb%");

            consulta.setFirstResult(0);
            consulta.setMaxResults(10);

            List<PersonaA> personas = consulta.getResultList();
            for (PersonaA persona : personas) {
                System.out.println("Hallado: " + persona);
                persona.setEnActivo(Boolean.TRUE);
            }

            Query consulta2 = em.createQuery(
                    "SELECT p FROM Persona p WHERE p.nombre LIKE :elNombre "
                    + " AND p.id = :id ORDER BY p.fechaNacimiento asc ");
            consulta2.setParameter("elNombre", "Alb%");
            consulta2.setParameter("id", 65536);
            try {
                PersonaA primero = (PersonaA) consulta2.getSingleResult();
                System.out.println("El primero es: " + primero);

                em.remove(primero);
            } catch (Exception e) {
                System.out.println("No existe el registro buscado para eliminar");
            }
            Query consulta3 = em.createNamedQuery("Customer.findAll");
            List<Customer> customers = consulta3.getResultList();
            for (Customer customer : customers) {
                System.out.println(customer);
            }
            
            
            
            Query consulta4 = em.createNamedQuery("Persona.menoresQue");
            consulta4.setParameter("fecha", new Date(), TemporalType.DATE);

            List<PersonaA> personas1 = consulta4.getResultList();
            for (PersonaA persona : personas1) {
                System.out.println("Hallado: " + persona);
                persona.setEnActivo(Boolean.TRUE);
            }
            
            
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }


    }
}
